<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>this</title>
    <script>
        /* this */
        /* 
        解析器（浏览器）在调用函数时，每次都会向函数内部传递一个隐含的参数
        隐含参数为this this指向的是一个对象，
        这个对象我们称之为函数执行的上下文对象
        根据函数调用的方式不同，this指向不同的对象
        跟创建方式无关，
            1.以函数的形式调用时，this永远都是window
            2.以方法的形式调用时，this就是调用方法的那个对象
        
        */
        function fun() {
            console.log(this.name);
        }
        fun();
        var obj = {
            name: "孙悟空",
            sayName: fun
        };
        //console.log(obj.sayName == fun);
        //调方法，this指向的是对象
        obj.sayName();
        //掉函数，this是window
        fun();


        //创建一个name变量
        var name = "全局";

        //创建一个fun()函数
        function fun1() {
            //obj.name是一个定值
            //this替换后可根据方法调用的不同，来实现不同的效果
            console.log(this.name);
        }

        //创建两个对象
        var obj = {
            name: "孙悟空",
            sayName: fun1
        };
        var obj2 = {
            name: "沙和尚",
            sayName: fun1
        }
        obj.sayName();
        obj2.sayName();
    </script>
</head>

<body>

</body>

</html>